package com.zbmy.plugin.im.server.core.codec;

import com.zbmy.plugin.im.server.core.exception.NullParamsException;
import com.zbmy.plugin.im.server.core.protocol.MessageHolder;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

/**
 * 
 * 消息编码器
 * @ClassName: PacketEncoder    
 * @author 杨乐平    
 * @date 2018年5月2日 上午11:10:08    
 * @version  v 1.0
 */
public class PacketEncoder extends MessageToByteEncoder<MessageHolder> {
    @Override
    protected void encode(ChannelHandlerContext ctx, MessageHolder msg, ByteBuf out) throws Exception {
        String body = msg.getBody();
        if (body == null) {
            throw new NullParamsException("body == null");
        }
        // 编码
        byte[] bytes = body.getBytes("utf-8");
		out.writeByte(msg.getType())			// 消息类型
        	.writeByte(msg.getSign())			// 消息标志
        	.writeInt(bytes.length)				// 消息长度
        	.writeBytes(bytes);					// 消息内容体
    }
}
